canlinsbc 2.2.0
Loading...
Searching...
No Matches
canlinsbc.h
Go to the documentation of this file.
1/****************************************************************************
2** Copyright (C) 2020 MikroElektronika d.o.o.
3** Contact: https://www.mikroe.com/contact
4**
5** Permission is hereby granted, free of charge, to any person obtaining a copy
6** of this software and associated documentation files (the "Software"), to deal
7** in the Software without restriction, including without limitation the rights
8** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9** copies of the Software, and to permit persons to whom the Software is
10** furnished to do so, subject to the following conditions:
11** The above copyright notice and this permission notice shall be
12** included in all copies or substantial portions of the Software.
13**
14** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20** USE OR OTHER DEALINGS IN THE SOFTWARE.
21****************************************************************************/
22
27
28#ifndef CANLINSBC_H
29#define CANLINSBC_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_uart.h"
52#include "drv_spi_master.h"
53#include "spi_specifics.h"
54
60
65
70
75#define CANLINSBC_REG_DMCR 0x01
76#define CANLINSBC_REG_LDOCR 0x02
77#define CANLINSBC_REG_DMSR 0x03
78#define CANLINSBC_REG_SECR 0x04
79#define CANLINSBC_REG_LDOECR 0x05
80#define CANLINSBC_REG_GPM0 0x06
81#define CANLINSBC_REG_GPM1 0x07
82#define CANLINSBC_REG_GPM2 0x08
83#define CANLINSBC_REG_GPM3 0x09
84#define CANLINSBC_REG_RWPR 0x0A
85#define CANLINSBC_REG_TRXCR 0x20
86#define CANLINSBC_REG_LTRXCR 0x21
87#define CANLINSBC_REG_TRXSR 0x22
88#define CANLINSBC_REG_TRXECR 0x23
89#define CANLINSBC_REG_LTRXSR 0x24
90#define CANLINSBC_REG_REGCR 0x25
91#define CANLINSBC_REG_DRCR 0x26
92#define CANLINSBC_REG_CIDR0 0x27
93#define CANLINSBC_REG_CIDR1 0x28
94#define CANLINSBC_REG_CIDR2 0x29
95#define CANLINSBC_REG_CIDR3 0x2A
96#define CANLINSBC_REG_CIDMR0 0x2B
97#define CANLINSBC_REG_CIDMR1 0x2C
98#define CANLINSBC_REG_CIDMR2 0x2D
99#define CANLINSBC_REG_CIDMR3 0x2E
100#define CANLINSBC_REG_CFCR 0x2F
101#define CANLINSBC_REG_BFECR 0x32
102#define CANLINSBC_REG_BFIR 0x33
103#define CANLINSBC_REG_TRXECR2 0x34
104#define CANLINSBC_REG_TRXESR2 0x35
105#define CANLINSBC_REG_WDCR1 0x36
106#define CANLINSBC_REG_WDCR2 0x37
107#define CANLINSBC_REG_WDSR 0x38
108#define CANLINSBC_REG_WDTRIG 0x39
109#define CANLINSBC_REG_EFCR 0x3A
110#define CANLINSBC_REG_FECR 0x3B
111#define CANLINSBC_REG_GLFT 0x67
112#define CANLINSBC_REG_CDMR0 0x68
113#define CANLINSBC_REG_CDMR1 0x69
114#define CANLINSBC_REG_CDMR2 0x6A
115#define CANLINSBC_REG_CDMR3 0x6B
116#define CANLINSBC_REG_CDMR4 0x6C
117#define CANLINSBC_REG_CDMR5 0x6D
118#define CANLINSBC_REG_CDMR6 0x6E
119#define CANLINSBC_REG_CDMR7 0x6F
120#define CANLINSBC_REG_PWKS 0x4B
121#define CANLINSBC_REG_WKECR 0x4C
122#define CANLINSBC_REG_GESR 0x60
123#define CANLINSBC_REG_SESR 0x61
124#define CANLINSBC_REG_LTRXESR 0x62
125#define CANLINSBC_REG_CTRXESR 0x63
126#define CANLINSBC_REG_WKESR 0x64
127#define CANLINSBC_REG_BFESR 0x65
128#define CANLINSBC_REG_LDOESR 0x66
129#define CANLINSBC_REG_DIDR 0x7E
130 // canlinsbc_reg
132
137
142
147#define CANLINSBC_DMCR_RSTEN 0x20
148#define CANLINSBC_DMCR_VCCOVSD 0x10
149#define CANLINSBC_DMCR_SLPVCCUC 0x08
150#define CANLINSBC_DMCR_DOPM_SLEEP_MODE 0x01
151#define CANLINSBC_DMCR_DOPM_STANDBY_MODE 0x04
152#define CANLINSBC_DMCR_DOPM_NORMAL_MODE 0x07
153#define CANLINSBC_DMCR_DOPM_MASK 0x07
154
159#define CANLINSBC_TRXCR_CFDPE 0x40
160#define CANLINSBC_TRXCR_PNCFOK 0x20
161#define CANLINSBC_TRXCR_CPNE 0x10
162#define CANLINSBC_TRXCR_COMP_STANDBY_MODE 0x00
163#define CANLINSBC_TRXCR_COMP_NORMAL_MODE 0x01
164#define CANLINSBC_TRXCR_COMP_SILENT_MODE 0x03
165#define CANLINSBC_TRXCR_COMP_MASK 0x03
166
171#define CANLINSBC_WDCR1_WDC_OFF_MODE 0x20
172#define CANLINSBC_WDCR1_WDC_TIME_OUT_MODE 0x40
173#define CANLINSBC_WDCR1_WDC_WINDOW_MODE 0x80
174#define CANLINSBC_WDCR1_WDC_MASK 0xE0
175#define CANLINSBC_WDCR1_WDPRE_FACTOR_1 0x00
176#define CANLINSBC_WDCR1_WDPRE_FACTOR_1_5 0x08
177#define CANLINSBC_WDCR1_WDPRE_FACTOR_2_5 0x10
178#define CANLINSBC_WDCR1_WDPRE_FACTOR_3_5 0x18
179#define CANLINSBC_WDCR1_WDPRE_MASK 0x18
180#define CANLINSBC_WDCR1_WDLSP 0x04
181#define CANLINSBC_WDCR1_WDLW 0x02
182
187#define CANLINSBC_WDTRIG_RESET 0x55
188
193#define CANLINSBC_DEVICE_ID 0x86
194
203#define CANLINSBC_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
204#define CANLINSBC_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
205
211#define CANLINSBC_TX_DRV_BUFFER_SIZE 100
212#define CANLINSBC_RX_DRV_BUFFER_SIZE 300
213 // canlinsbc_set
215
220
225
230#define CANLINSBC_MAP_MIKROBUS( cfg, mikrobus ) \
231 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
232 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
233 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
234 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
235 cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
236 cfg.txd_lin = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
237 cfg.rxd_lin = MIKROBUS( mikrobus, MIKROBUS_INT ); \
238 cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
239 cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX );
240 // canlinsbc_map // canlinsbc
243
248typedef struct
249{
250 // Output pins
251 digital_out_t rst;
252 digital_out_t txd_lin;
253
254 // Input pins
255 digital_in_t rxd_lin;
256
257 // Modules
258 spi_master_t spi;
259
260 // Modules
261 uart_t uart;
262
263 // Buffers
266
267 pin_name_t chip_select;
268
270
275typedef struct
276{
277 // Communication gpio pins
278 pin_name_t miso;
279 pin_name_t mosi;
280 pin_name_t sck;
281 pin_name_t cs;
282 pin_name_t rx_pin;
283 pin_name_t tx_pin;
284
285 // Additional gpio pins
286 pin_name_t rst;
287 pin_name_t txd_lin;
288 pin_name_t rxd_lin;
289
290 // static variable
291 uint32_t spi_speed;
292 spi_master_mode_t spi_mode;
293 spi_master_chip_select_polarity_t cs_polarity;
294 uint32_t baud_rate;
296 uart_data_bits_t data_bit;
297 uart_parity_t parity_bit;
298 uart_stop_bits_t stop_bit;
299
301
312
318
329
344
358
370err_t canlinsbc_write_reg ( canlinsbc_t *ctx, uint8_t reg, uint8_t data_in );
371
383err_t canlinsbc_read_reg ( canlinsbc_t *ctx, uint8_t reg, uint8_t *data_out );
384
396err_t canlinsbc_generic_write ( canlinsbc_t *ctx, uint8_t *data_in, uint16_t len );
397
409err_t canlinsbc_generic_read ( canlinsbc_t *ctx, uint8_t *data_out, uint16_t len );
410
420void canlinsbc_set_rst_pin ( canlinsbc_t *ctx, uint8_t state );
421
431void canlinsbc_set_txd_lin_pin ( canlinsbc_t *ctx, uint8_t state );
432
442
452
463
464#ifdef __cplusplus
465}
466#endif
467#endif // CANLINSBC_H
468 // canlinsbc
470
471// ------------------------------------------------------------------------ END
canlinsbc_return_value_t
CAN-LIN SBC Click return value data.
Definition canlinsbc.h:307
@ CANLINSBC_OK
Definition canlinsbc.h:308
@ CANLINSBC_ERROR
Definition canlinsbc.h:309
#define CANLINSBC_TX_DRV_BUFFER_SIZE
CAN-LIN SBC driver buffer size.
Definition canlinsbc.h:211
#define CANLINSBC_RX_DRV_BUFFER_SIZE
Definition canlinsbc.h:212
err_t canlinsbc_write_reg(canlinsbc_t *ctx, uint8_t reg, uint8_t data_in)
CAN LIN SBC write register function.
err_t canlinsbc_init(canlinsbc_t *ctx, canlinsbc_cfg_t *cfg)
CAN-LIN SBC initialization function.
err_t canlinsbc_generic_read(canlinsbc_t *ctx, uint8_t *data_out, uint16_t len)
CAN LIN SBC generic read function.
err_t canlibsbc_check_communication(canlinsbc_t *ctx)
CAN LIN SBC check communication function.
err_t canlinsbc_default_cfg(canlinsbc_t *ctx)
CAN-LIN SBC default configuration function.
err_t canlinsbc_generic_write(canlinsbc_t *ctx, uint8_t *data_in, uint16_t len)
CAN LIN SBC generic write function.
uint8_t canlinsbc_get_rxd_lin_pin(canlinsbc_t *ctx)
CAN LIN SBC get RXD LIN pin function.
void canlinsbc_reset_device(canlinsbc_t *ctx)
CAN LIN SBC reset device function.
void canlinsbc_set_txd_lin_pin(canlinsbc_t *ctx, uint8_t state)
CAN LIN SBC set TXD LIN pin function.
void canlinsbc_cfg_setup(canlinsbc_cfg_t *cfg)
CAN-LIN SBC configuration object setup function.
void canlinsbc_set_rst_pin(canlinsbc_t *ctx, uint8_t state)
CAN LIN SBC set reset pin function.
err_t canlinsbc_read_reg(canlinsbc_t *ctx, uint8_t reg, uint8_t *data_out)
CAN LIN SBC read register function.
This file contains SPI specific macros, functions, etc.
CAN-LIN SBC Click configuration object.
Definition canlinsbc.h:276
uint32_t baud_rate
Definition canlinsbc.h:294
pin_name_t rxd_lin
Definition canlinsbc.h:288
spi_master_chip_select_polarity_t cs_polarity
Definition canlinsbc.h:293
bool uart_blocking
Definition canlinsbc.h:295
pin_name_t sck
Definition canlinsbc.h:280
uart_data_bits_t data_bit
Definition canlinsbc.h:296
spi_master_mode_t spi_mode
Definition canlinsbc.h:292
pin_name_t tx_pin
Definition canlinsbc.h:283
pin_name_t mosi
Definition canlinsbc.h:279
uint32_t spi_speed
Definition canlinsbc.h:291
pin_name_t rx_pin
Definition canlinsbc.h:282
pin_name_t txd_lin
Definition canlinsbc.h:287
uart_stop_bits_t stop_bit
Definition canlinsbc.h:298
pin_name_t miso
Definition canlinsbc.h:278
uart_parity_t parity_bit
Definition canlinsbc.h:297
pin_name_t rst
Definition canlinsbc.h:286
pin_name_t cs
Definition canlinsbc.h:281
CAN-LIN SBC Click context object.
Definition canlinsbc.h:249
digital_in_t rxd_lin
Definition canlinsbc.h:255
spi_master_t spi
Definition canlinsbc.h:258
uint8_t uart_tx_buffer[CANLINSBC_TX_DRV_BUFFER_SIZE]
Definition canlinsbc.h:265
uart_t uart
Definition canlinsbc.h:261
digital_out_t txd_lin
Definition canlinsbc.h:252
uint8_t uart_rx_buffer[CANLINSBC_RX_DRV_BUFFER_SIZE]
Definition canlinsbc.h:264
digital_out_t rst
Definition canlinsbc.h:251
pin_name_t chip_select
Definition canlinsbc.h:267